package com.leaf.u_jvm;

/**
 * 创建线程导致内存溢出
 * 
 * VM args:-Xss2m
 * 
 * 使用-Xss参数减少栈内存容量。结果：抛出StackOverflowError异常，异常出现时输出的栈深度相应缩小
 * 定义了大量的本地变量，增大此方法帧中本地变量表的长度。结果：抛出StackOverflowError异常时输出的堆栈深度相应缩小
 * 
 * 注意：特别提示，如果要尝试运行这段代码，记得先保存当前的工作
 * 由于在Windows平台的虚拟机中，Java的线程映射到操作系统的内核线程上的，因此这段代码执行时有较大的风险
 * 可能会导致操作系统假死
 * 警告：建议在虚拟机中运行，使用真实环境，可能导致黑屏，我已经中招了
 */
public class JavaVMStackOOM {

	private void dontStop(){
		while(true){}
	}
	
	public void stackLeakByThread(){
		while(true){
			new Thread(new Runnable(){

				@Override
				public void run() {
					dontStop();
				}
				
			}).start();;
		}
	}
	
	
	public static void main(String[] args) throws Throwable {
		JavaVMStackOOM oom = new JavaVMStackOOM();
		oom.stackLeakByThread();
	}
}
